//package com.paypalpay.controller.interfaces;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.paypalpay.entity.common.DeviceRealTimeInformation;
//import com.paypalpay.entity.common.UnifiedOrderPackages;
//import com.paypalpay.entity.common.UserboundPaymentOrder;
//import com.paypalpay.external.entity.order.request.RequestOrder;
//import com.paypalpay.external.entity.order.request.RequestOrderData;
//import com.paypalpay.external.entity.order.request.RequestOrderOrderList;
//import com.paypalpay.external.entity.order.response.ResponseOrder;
//import com.paypalpay.external.entity.order.response.ResponseOrderData;
//import com.paypalpay.external.entity.order.response.ResponseOrderTradeData;
//import com.paypalpay.external.utils.UtilsInterfacesPackage;
//import com.paypalpay.pojo.Constant;
//import com.paypalpay.service.*;
//import com.paypalpay.turntointerfaceservice.TurnToOrderService;
//import com.paypalpay.turntointerfaceservice.TurnToQueryDeviceRealTimeService;
//import com.paypalpay.turntointerfaceservice.TurnToRenewPackagesService;
//import com.paypalpay.util.wx.MD5;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import io.swagger.annotations.ApiParam;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.*;
//
//import javax.servlet.http.HttpSession;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//
///**
// * Demo 订购下单  废弃
// *
// * @author lm
// * @date 2018/08/31
// */
//@RestController
//@Api("前端有卡模式下订单流程")
//public class OrderDevicePackageController {
//    @Autowired
//    private HttpSession session;
//    @Autowired
//    private SequenceService sequenceService;
//    @Autowired
//    private UnifiedOrderPackagesService unifiedOrderPackagesService;
//
//    @Autowired
//    private InternationalPayPackageService internationalPayPackageService;
//
//    @Autowired
//    UserboundPaymentOrderService userboundPaymentOrderService;
//    @Autowired
//    PartnerService partnerService;
//
//    @CrossOrigin
//    @RequestMapping(value = "/order", produces = "application/json;charset=utf-8", method = RequestMethod.POST)
//    @ResponseBody
//    @ApiOperation(value = "下单订购流量", response = ResponseOrder.class)
//    public String order(@ApiParam @RequestBody RequestOrder requestOrder) {
//        String requestStr = JSON.toJSONString(requestOrder);
//        System.out.println("前端请求报文是：" + requestStr);
//        // 1，生成流水号
//        String ConnSeqNo = sequenceService.getPackageTaskNo();
//        // 2,生成当前时间戳
//        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        String curtime = df.format(new Date());
//        UtilsInterfacesPackage utils = new UtilsInterfacesPackage();
//
//        requestOrder = JSONArray.parseObject(requestStr, RequestOrder.class);
//
//        String requestSign = requestOrder.getSign();
//        if (requestOrder.getSign() == null) {
//            System.out.println("请求报文不合法:sign为空");
//            String jsonString = utils.dataWeiKong(ConnSeqNo, curtime);
//            return jsonString;
//        } else {
//
//            System.out.println("请求的签名是：" + requestSign);
//            RequestOrderData requestData = requestOrder.getData();
//            if (requestOrder.getData() == null) {
//                System.out.println("请求报文不合法:data为空");
//                String jsonString = utils.dataWeiKong(ConnSeqNo, curtime);
//                return jsonString;
//            } else {
//                String partnerCode = requestData.getPartnerCode();
//
//                String secret = partnerService.findSecretByPartnerCode(partnerCode);
//                String connSeqNo = requestData.getConnSeqNo();
//                String token = requestData.getToken();
//                String tradeTime = requestData.getTradeTime();
//                String tradeType = requestData.getTradeType();
//                String lang = requestData.getLang();
//                if (requestData.getTradeData() == null) {
//                    System.out.println("请求报文不合法:TradeData为空");
//                    String jsonString = utils.dataWeiKong(ConnSeqNo, curtime);
//                    return jsonString;
//                } else {
//                    //将报文中有用的信息取出来存下来
//                    String deviceId = requestData.getTradeData().getDeviceId();
//                    String deviceType = requestData.getTradeData().getDeviceType();
//                    String isOpen = requestData.getTradeData().getIsOpen();
//                    //客户的唯一id
//                    String requestOrderId = requestData.getTradeData().getRequestOrderId();
//                    session.setAttribute("isOpen", isOpen);
//                    if (deviceId == null || deviceId.length() <= 0 || deviceType == null || deviceType.length() <= 0 || isOpen == null || isOpen.length() <= 0 || connSeqNo == null || connSeqNo.length() <= 0 || token == null || token.length() <= 0 || partnerCode == null || partnerCode.length() <= 0 || tradeTime == null || tradeTime.length() <= 0 || requestOrderId == null) {
//                        //参数不全,回复报文
//                        System.out.println("请求报文不合法:参数不全！");
//                        String jsonString = utils.dataWeiKong(ConnSeqNo, curtime);
//                        return jsonString;
//                    } else {
//                        List<RequestOrderOrderList> orderList = null;
//                        List<ResponseOrderTradeData> tradeData = new ArrayList<ResponseOrderTradeData>();
//                        ResponseOrderTradeData tra = null;
//                        String packageCode = "";
//                        String orderPeriod = "";
//                        String orderUnit = "";
//                        String payAmount = "";
//                        String channelOrderID = "";
//                        // 将请求体json转成String
//                        String str = JSON.toJSONString(requestData);
//                        // 将Str拿去计算签名
//                        String sign = utils.calculateSignature(str);
//                        System.out.println("计算的签名是：" + sign);
//
//                        //参数是齐全验证签名：
//                        if (!requestSign.equalsIgnoreCase(sign)) {
//                            // 如果收到的签名跟算出的签名相同才可以回复正确的报文
//                            String jsonString = utils.publicMessage(connSeqNo, tradeTime, partnerCode, token, tradeType);
//                            return jsonString;
//
//                        } else {
//                            //参数齐全，而且签名通过，现在先去把上面取到的数据入库
//                            orderList = requestData.getTradeData().getOrderList();
//                            for (RequestOrderOrderList list : orderList) {
//                                packageCode = list.getPackageCode();
//                                orderPeriod = list.getOrderPeriod();
//                                orderUnit = list.getOrderUnit();
//                                payAmount = list.getPayAmount();
//                                channelOrderID = list.getChannelOrderID();
//
//                                //根据前面得到的code去数据库查询name
//                                String packageName = internationalPayPackageService.getPackageNameBypackageCode(packageCode, partnerCode);
//                                System.out.println("套餐名称取到的是什么：" + packageName);
//                                //1:数据入库
//                                UnifiedOrderPackages order = new UnifiedOrderPackages();
//                                order.setDeviceId(deviceId);
//                                order.setDeviceType(deviceType);
//                                order.setPackageName(packageName);
//                                order.setPackageCode(packageCode);
//                                order.setOrderPeriod(orderPeriod);
//                                order.setOrderUnit(orderUnit);
//                                order.setPayAmount(payAmount);
//                                order.setIsOpen(isOpen);
//                                order.setChannelOrderID(channelOrderID);
//                                order.setCreateTime(tradeTime);
//                                //入库订购订单信息
//                                unifiedOrderPackagesService.putInOrderInfo(order);
//                                System.out.println("到这里说明数据库入库操作完成：");
//                                //先判断一下是不是首单
//
//                                //1,先去查询一下当前设备是不是具有OTA功能的
//                                TurnToQueryDeviceRealTimeService queryDeviceRealTime = new TurnToQueryDeviceRealTimeService();
//                                DeviceRealTimeInformation information = queryDeviceRealTime.queryDeviceRealTime(deviceId, deviceType, secret, partnerCode);
//
//                                if (information == null) {
//                                    System.out.println("请求未响应");
//
//                                    ResponseOrderData data = new ResponseOrderData();
//                                    data.setConnSeqNo(ConnSeqNo);
//                                    data.setPartnerCode(partnerCode);
//                                    data.setToken(token);
//                                    data.setTradeType(tradeType);
//                                    data.setTradeTime(curtime);
//                                    data.setTradeRstCode(1400);
//                                    data.setTradeRstMessage("下单前查询设备失败");
//
//                                    ResponseOrder responseOrder = new ResponseOrder();
//                                    responseOrder.setData(data);
//                                    responseOrder.setSign(MD5.calcMD5(JSON.toJSONString(data)));
//
//                                    // 返回给调用者的报文
//                                    String jsonString = JSON.toJSONString(responseOrder);
//                                    System.out.println("响应报文：" + jsonString);
//                                    return jsonString;
//                                } else {
//                                    System.out.println("请求至少响应了");
//                                    if (!true == Constant.RET_CODE_0000.equalsIgnoreCase(information.getRetCode())) {
//                                        System.out.println("响应的内容可能有问题：" + information.getResultInfo());
//
//                                        ResponseOrderData data = new ResponseOrderData();
//                                        data.setConnSeqNo(ConnSeqNo);
//                                        data.setPartnerCode(partnerCode);
//                                        data.setToken(token);
//                                        data.setTradeType(tradeType);
//                                        data.setTradeTime(curtime);
//                                        data.setTradeRstCode(Integer.parseInt(information.getRetCode()));
//                                        data.setTradeRstMessage(information.getResultInfo());
//
//                                        ResponseOrder responseOrder = new ResponseOrder();
//                                        responseOrder.setData(data);
//                                        responseOrder.setSign(MD5.calcMD5(JSON.toJSONString(data)));
//
//                                        // 返回给调用者的报文
//                                        String jsonString = JSON.toJSONString(responseOrder);
//                                        System.out.println("响应报文：" + jsonString);
//                                        return jsonString;
//
//                                    } else {
//                                        System.out.println("请求至少响应:" + information.getResultInfo());
//
//                                        if (information.getPackageCode() == null || !information.getPackageCode().equalsIgnoreCase(packageCode)) {
//                                            //返回的packageCode跟要订购的packageCode不一致，走订购接口
//
//                                            // =======================下单接口======================================//
//
//                                            //2:拿着现在有的数据去北北京下正式的单
//                                            TurnToOrderService turnToOrderService = new TurnToOrderService();
//                                            UnifiedOrderPackages user = turnToOrderService.orderMonthlyPackage(partnerCode, deviceId, deviceType, packageName, packageCode, orderPeriod, payAmount, isOpen, secret);
//                                            System.out.println("到这里说明拿到北京给回来的数据了：" + user.getRetCode());
//
//                                            if (user == null) {
//                                                ResponseOrderData data = new ResponseOrderData();
//                                                data.setConnSeqNo(ConnSeqNo);
//                                                data.setPartnerCode(partnerCode);
//                                                data.setToken(token);
//                                                data.setTradeType(tradeType);
//                                                data.setTradeTime(curtime);
//                                                data.setTradeRstCode(1401);
//                                                data.setTradeRstMessage("下单失败");
//
//                                                ResponseOrder responseOrder = new ResponseOrder();
//                                                responseOrder.setData(data);
//                                                responseOrder.setSign(MD5.calcMD5(JSON.toJSONString(data)));
//
//                                                // 返回给调用者的报文
//                                                String jsonString = JSON.toJSONString(responseOrder);
//                                                System.out.println("响应报文：" + jsonString);
//                                                return jsonString;
//
//                                            } else {
//                                                if (true == Constant.RET_CODE_0000.equalsIgnoreCase(user.getRetCode())) {
//                                                    //3.现在拿到数据了，去数据库更新之前的订单记录
//                                                    order.setOrderId(user.getOrderId());
//                                                    order.setOrderStartDate(user.getOrderStartDate());
//                                                    order.setOrderExpireDate(user.getOrderExpireDate());
//                                                    order.setUpdateTime(tradeTime);
//                                                    unifiedOrderPackagesService.updateOrderInfo(order);
//
//                                                    //下单存库
//                                                    UserboundPaymentOrder paymentOrder = new UserboundPaymentOrder();
//                                                    paymentOrder.setPartnerCode(partnerCode);
//                                                    paymentOrder.setPackageCode(packageCode);
//                                                    paymentOrder.setPackageName(packageName);
//                                                    paymentOrder.setOrderId(user.getOrderId());
//                                                    paymentOrder.setDeviceId(deviceId);
//                                                    paymentOrder.setDeviceType(deviceType);
//                                                    paymentOrder.setAmount(payAmount);
//                                                    paymentOrder.setOrderPeriod(orderPeriod);
//                                                    paymentOrder.setOrderUnit(orderUnit);
//                                                    //paymentOrder.setIsOpen(isOpen);
//                                                    paymentOrder.setChannelOrderID(channelOrderID);
//                                                    paymentOrder.setRequestOrderId(requestOrderId);
//                                                    // 根据收到的deviceId去更新数据表，deviceId此时是有的，所以不能为null,openid为空
//                                                    userboundPaymentOrderService.InsertPaymentOrder(paymentOrder);
//
//
//                                                    System.out.println("到这里说明数据库更新操作完成：");
//                                                    tra = new ResponseOrderTradeData();
//                                                    tra.setChannelOrderID(channelOrderID);
//                                                    if (user.getOrderId() == null) {
//                                                        tra.setOrderId("");
//                                                        tra.setOrderStartDate("");
//                                                        tra.setOrderExpireDate("");
//                                                        tradeData.add(tra);
//
//                                                    } else {
//                                                        tra.setOrderId(user.getOrderId());
//                                                        tra.setOrderStartDate(user.getOrderStartDate());
//                                                        tra.setOrderExpireDate(user.getOrderExpireDate());
//                                                        tradeData.add(tra);
//                                                    }
//
//                                                    ResponseOrderData data = new ResponseOrderData();
//                                                    data.setConnSeqNo(ConnSeqNo);
//                                                    data.setPartnerCode(partnerCode);
//                                                    data.setToken(token);
//                                                    data.setTradeType(tradeType);
//                                                    data.setTradeTime(tradeTime);
//                                                    data.setTradeRstCode(1000);
//                                                    data.setTradeRstMessage("成功");
//                                                    data.setTradeData(tradeData);
//
//                                                    ResponseOrder responseOrder = new ResponseOrder();
//                                                    responseOrder.setData(data);
//                                                    responseOrder.setSign(MD5.calcMD5(JSON.toJSONString(data)));
//
//                                                    // 返回给调用者的报文
//                                                    String jsonString = JSON.toJSONString(responseOrder);
//                                                    System.out.println("响应报文：" + jsonString);
//                                                    return jsonString;
//                                                } else {
//
//                                                    ResponseOrderData data = new ResponseOrderData();
//                                                    data.setConnSeqNo(ConnSeqNo);
//                                                    data.setPartnerCode(partnerCode);
//                                                    data.setToken(token);
//                                                    data.setTradeType(tradeType);
//                                                    data.setTradeTime(curtime);
//                                                    data.setTradeRstCode(Integer.parseInt(user.getRetCode()));
//                                                    data.setTradeRstMessage(user.getResultInfo());
//
//                                                    ResponseOrder responseOrder = new ResponseOrder();
//                                                    responseOrder.setData(data);
//                                                    responseOrder.setSign(MD5.calcMD5(JSON.toJSONString(data)));
//
//                                                    // 返回给调用者的报文
//                                                    String jsonString = JSON.toJSONString(responseOrder);
//                                                    System.out.println("响应报文：" + jsonString);
//                                                    return jsonString;
//                                                }
//                                            }
//
//                                        } else {//返回的packageCode跟要订购的packageCode一致，走续订接口
//
//                                            //预付费套餐不允许续订buy_type=1就是预付费套餐
//                                            if (information.getBuyType().equalsIgnoreCase("1")) {
//                                                // =======================下单接口======================================//
//                                                //2:拿着现在有的数据去北北京下正式的单
//                                                TurnToOrderService turnToOrderService = new TurnToOrderService();
//                                                UnifiedOrderPackages user = turnToOrderService.orderMonthlyPackage(partnerCode, deviceId, deviceType, packageName, packageCode, orderPeriod, payAmount, isOpen, secret);
//                                                System.out.println("到这里说明拿到北京给回来的数据了：" + user.getRetCode());
//
//                                                if (user == null) {
//                                                    ResponseOrderData data = new ResponseOrderData();
//                                                    data.setConnSeqNo(ConnSeqNo);
//                                                    data.setPartnerCode(partnerCode);
//                                                    data.setToken(token);
//                                                    data.setTradeType(tradeType);
//                                                    data.setTradeTime(curtime);
//                                                    data.setTradeRstCode(1401);
//                                                    data.setTradeRstMessage("下单失败");
//
//                                                    ResponseOrder responseOrder = new ResponseOrder();
//                                                    responseOrder.setData(data);
//                                                    responseOrder.setSign(MD5.calcMD5(JSON.toJSONString(data)));
//
//                                                    // 返回给调用者的报文
//                                                    String jsonString = JSON.toJSONString(responseOrder);
//                                                    System.out.println("响应报文：" + jsonString);
//                                                    return jsonString;
//
//                                                } else {
//                                                    if (true == Constant.RET_CODE_0000.equalsIgnoreCase(user.getRetCode())) {
//                                                        //3.现在拿到数据了，去数据库更新之前的订单记录
//                                                        order.setOrderId(user.getOrderId());
//                                                        order.setOrderStartDate(user.getOrderStartDate());
//                                                        order.setOrderExpireDate(user.getOrderExpireDate());
//                                                        order.setUpdateTime(tradeTime);
//                                                        unifiedOrderPackagesService.updateOrderInfo(order);
//
//                                                        //下单存库
//                                                        UserboundPaymentOrder paymentOrder = new UserboundPaymentOrder();
//                                                        paymentOrder.setPartnerCode(partnerCode);
//                                                        paymentOrder.setPackageCode(packageCode);
//                                                        paymentOrder.setPackageName(packageName);
//                                                        paymentOrder.setOrderId(user.getOrderId());
//                                                        paymentOrder.setDeviceId(deviceId);
//                                                        paymentOrder.setDeviceType(deviceType);
//                                                        paymentOrder.setAmount(payAmount);
//                                                        paymentOrder.setOrderPeriod(orderPeriod);
//                                                        paymentOrder.setOrderUnit(orderUnit);
//                                                        //paymentOrder.setIsOpen(isOpen);
//                                                        paymentOrder.setChannelOrderID(channelOrderID);
//                                                        paymentOrder.setRequestOrderId(requestOrderId);
//                                                        // 根据收到的deviceId去更新数据表，deviceId此时是有的，所以不能为null,openid为空
//                                                        userboundPaymentOrderService.InsertPaymentOrder(paymentOrder);
//
//
//                                                        System.out.println("到这里说明数据库更新操作完成：");
//                                                        tra = new ResponseOrderTradeData();
//                                                        tra.setChannelOrderID(channelOrderID);
//                                                        if (user.getOrderId() == null) {
//                                                            tra.setOrderId("");
//                                                            tra.setOrderStartDate("");
//                                                            tra.setOrderExpireDate("");
//                                                            tradeData.add(tra);
//
//                                                        } else {
//                                                            tra.setOrderId(user.getOrderId());
//                                                            tra.setOrderStartDate(user.getOrderStartDate());
//                                                            tra.setOrderExpireDate(user.getOrderExpireDate());
//                                                            tradeData.add(tra);
//                                                        }
//
//                                                        ResponseOrderData data = new ResponseOrderData();
//                                                        data.setConnSeqNo(ConnSeqNo);
//                                                        data.setPartnerCode(partnerCode);
//                                                        data.setToken(token);
//                                                        data.setTradeType(tradeType);
//                                                        data.setTradeTime(tradeTime);
//                                                        data.setTradeRstCode(1000);
//                                                        data.setTradeRstMessage("成功");
//                                                        data.setTradeData(tradeData);
//
//                                                        ResponseOrder responseOrder = new ResponseOrder();
//                                                        responseOrder.setData(data);
//                                                        responseOrder.setSign(MD5.calcMD5(JSON.toJSONString(data)));
//
//                                                        // 返回给调用者的报文
//                                                        String jsonString = JSON.toJSONString(responseOrder);
//                                                        System.out.println("响应报文：" + jsonString);
//                                                        return jsonString;
//                                                    } else {
//
//                                                        ResponseOrderData data = new ResponseOrderData();
//                                                        data.setConnSeqNo(ConnSeqNo);
//                                                        data.setPartnerCode(partnerCode);
//                                                        data.setToken(token);
//                                                        data.setTradeType(tradeType);
//                                                        data.setTradeTime(curtime);
//                                                        data.setTradeRstCode(Integer.parseInt(user.getRetCode()));
//                                                        data.setTradeRstMessage(user.getResultInfo());
//
//                                                        ResponseOrder responseOrder = new ResponseOrder();
//                                                        responseOrder.setData(data);
//                                                        responseOrder.setSign(MD5.calcMD5(JSON.toJSONString(data)));
//
//                                                        // 返回给调用者的报文
//                                                        String jsonString = JSON.toJSONString(responseOrder);
//                                                        System.out.println("响应报文：" + jsonString);
//                                                        return jsonString;
//                                                    }
//                                                }
//
//                                            } else {
//                                                //后付费套餐允许续订buy_type=2就是后付费套餐
//                                                // =======================续订接口======================================//
//                                                System.out.println("===走这边的意思是走续订===" + information.getOrderCode());
//                                                String order_id = information.getOrderCode();
//                                                //已经有单，重新入库一个单
//                                                //3.现在拿到数据了，去数据库更新之前的订单记录
//                                                UserboundPaymentOrder paymentOrder = new UserboundPaymentOrder();
//                                                paymentOrder.setPartnerCode(partnerCode);
//                                                paymentOrder.setPackageCode(packageCode);
//                                                paymentOrder.setPackageName(packageName);
//                                                paymentOrder.setOrderId(order_id);
//                                                paymentOrder.setDeviceId(deviceId);
//                                                paymentOrder.setDeviceType(deviceType);
//                                                paymentOrder.setAmount(payAmount);
//                                                paymentOrder.setOrderPeriod(orderPeriod);
//                                                paymentOrder.setOrderUnit(orderUnit);
//                                                //续订就是1
//                                                paymentOrder.setIsRenew("1");
//                                                //paymentOrder.setIsOpen(isOpen);
//                                                paymentOrder.setChannelOrderID(channelOrderID);
//                                                paymentOrder.setRequestOrderId(requestOrderId);
//                                                // 根据收到的deviceId去更新数据表，deviceId此时是有的，所以不能为null,openid为空
//                                                userboundPaymentOrderService.UpdateRenewPackagesOrder(paymentOrder);
//
//                                                System.out.println("到这里说明数据库更新操作完成：");
//
//                                                tra = new ResponseOrderTradeData();
//                                                tra.setChannelOrderID(channelOrderID);
//                                                tra.setOrderId(information.getOrderCode());
//                                                tradeData.add(tra);
//
//                                                ResponseOrderData data = new ResponseOrderData();
//                                                data.setConnSeqNo(ConnSeqNo);
//                                                data.setPartnerCode(partnerCode);
//                                                data.setToken(token);
//                                                data.setTradeType(tradeType);
//                                                data.setTradeTime(tradeTime);
//                                                data.setTradeRstCode(1000);
//                                                data.setTradeRstMessage("成功");
//                                                data.setTradeData(tradeData);
//
//                                                ResponseOrder responseOrder = new ResponseOrder();
//                                                responseOrder.setData(data);
//                                                responseOrder.setSign(MD5.calcMD5(JSON.toJSONString(data)));
//
//                                                // 返回给调用者的报文
//                                                String jsonString = JSON.toJSONString(responseOrder);
//                                                System.out.println("响应报文：" + jsonString);
//                                                return jsonString;
//
//
//                                            }
//
//
//                                        }
//
//
//                                    }
//                                }
//
//                            }
//                        }
//
//                    }
//                }
//            }
//        }
//
//        return null;
//    }
//}